package javaeSE.package7;

public class Wrapper {
    public static void main(String[] args) {
        
        // 1 基本数据类型 --->包装类：调用包装类的构造器
        int num1 = 10;
        //System.out.println(num1.toString());
        Integer in1 = new Integer(num1);
        System.out.println(in1.toString());
        // 纯数字字符串  '123abc' 报异常
        Integer in2 = new Integer("123");
        System.out.println(in2.toString());
        
        Float f1 = new Float(12.3f);
        Float f2 = new Float("12.3");
        System.out.println(f1);
        System.out.println(f2);
        
        // 不区分大小写   但是乱写就是false
        Boolean b2 = new Boolean("TrUe");
        System.out.println(b2);
        Boolean b3 = new Boolean("true123");
        System.out.println(b3);//false
        
        Order order = new Order();
        System.out.println(order.isMale);//false
        System.out.println(order.isFemale);//null 这个注意一下子
        
        // 2
        // 包装类 ==>基本数据类型:调用包装类Xxx的xxxValue()
        // String类型 ==>基本数据类型、包装类：调用包装类的parseXxx(String s)
        Integer in10 = new Integer(12);
        int i10 = in10.intValue();
        System.out.println(i10 + 1);
        
        Float f11 = new Float(12.3);
        float f21 = f11.floatValue();
        System.out.println(f21 + 1);
        
        
        String str1 = "123";
        //错误的情况：
        //int num1 = (int)str1;   Integer in1 = (Integer)str1;  可能会报NumberFormatException
        int num2 = Integer.parseInt(str1);
        System.out.println(num2 + 1);
        




        //3 JDK 5.0 新特性：自动装箱 与自动拆箱  5.0 之后现在就是这么写
        int num111 = 10;
        //基本数据类型-->包装类的对象
        //method(num1);
        
        //自动装箱：基本数据类型 --->包装类
        int num222 = 10;
        //自动装箱
        Integer in111 = num222;
        
        boolean b1234 = true;
        //自动装箱
        Boolean b22 = b1234;
        
        //自动拆箱：包装类--->基本数据类型
        System.out.println(in1.toString());
        //自动拆箱  拆回去  类 ==> 基本数据类型
        int in3 = in111;
        
        
        // 4 基本数据 ==> String
        int num = 10;
        //方式1：连接运算
        String str = num + "";
        //方式2：调用String的valueOf(Xxx xxx)
        float f = 12.3f;
        String str2 = String.valueOf(f);//  ==>  "12.3"
        
        String str3 = String.valueOf(new Double(12.4));  //  (包装类也可以放进去)
        System.out.println(str2);
        System.out.println(str3);  //"12.4"
        
        
        // 5 String   ==> 基本数据 || 包装类
        String s = "123";
        //错误的情况： 	int num1 = (int)str1;   Integer in1 = (Integer)str1（编译不通过 无关系的类型不能强转）;
        //可能会报NumberFormatException
        int n2 = Integer.parseInt(s);
        System.out.println(n2 + 1);
        // 总是false 只有字符串是true才是true 不然转换的全是false
        String ss2 = "true";
        boolean bb1 = Boolean.parseBoolean(ss2);
        // System.out.println(bb1);
    }
    
    
    public void method(Object obj) {
        System.out.println(obj);
    }
}

class Order {
    
    boolean isMale;
    Boolean isFemale;
}



  /*       包装类的使用:
           1.java提供了8种基本数据类型对应的包装类，使得基本数据类型的变量具有类的特征
           2.掌握的：基本数据类型、包装类、String三者之间的相互转换      */

